home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / Issue39 / construc / TRKTABLE.DPR < prev    next >
Encoding:
Text File  |  1998-10-06  |  2.3 KB  |  87 lines

  1. program TrkTable;
  2. uses
  3.   DB, DBTables;
  4. {$APPTYPE CONSOLE}
  5. var
  6.   f: Text;
  7.   Str,Agent: String;
  8.   hits: Integer = 0;
  9.   refer: Integer = 0;
  10.  
  11.   function CopyStripDelete(var Str: String; From,Len: Integer): String;
  12.   begin
  13.     Result := Copy(Str,From,Len); { copy }
  14.     Delete(Str,1,Len); { delete }
  15.     Len := Length(Result);
  16.     while Result[Len] = #32 do Dec(Len);
  17.     SetLength(Result,Len) { strip }
  18.   end {CopyStripDelete};
  19.  
  20. begin
  21.   if ParamCount = 0 then
  22.   begin
  23.     writeln('Usage: TrkTable [datfile]');
  24.     Halt
  25.   end;
  26.  
  27.   with TTable.Create(nil) do
  28.   try
  29.     Active := False;
  30.     TableType := ttParadox;
  31.     TableName := ParamStr(1)+'.DB';
  32.     with FieldDefs do
  33.     begin
  34.       Clear;
  35.       Add('DateTime', ftString, 24, FALSE);
  36.       Add('IP', ftString, 16, FALSE);
  37.       Add('UserAgent', ftString,128, FALSE);
  38.       Add('ThisPage', ftString, 128, FALSE);
  39.       Add('Referrer', ftString, 128, FALSE);
  40.     end;
  41.     CreateTable;
  42.     Open;
  43.     System.Assign(f,ParamStr(1)+'.trk');
  44.     System.Reset(f);
  45.     while not System.Eof(f) do
  46.     begin
  47.       readln(f,Str);
  48.       Append;
  49.       FieldByName('DateTime').AsString :=
  50.         CopyStripDelete(Str,1,24);
  51.       FieldByName('IP').AsString :=
  52.         CopyStripDelete(Str,1,16);
  53.       Agent := CopyStripDelete(Str,1,128);
  54.     {$IFNDEF AGENTOS}
  55.       if pos('(compatible; ',Agent) > 0 then
  56.       begin
  57.         System.Delete(Agent,1,pos('(compatible; ',Agent)+12);
  58.         if Pos(';',Agent) > 0 then
  59.           System.Delete(Agent,Pos(';',Agent),255)
  60.         else
  61.           if Pos(')',Agent) > 0 then
  62.             System.Delete(Agent,Pos(')',Agent),255)
  63.       end
  64.       else
  65.         if Pos(' ',Agent) > 0 then
  66.           System.Delete(Agent,Pos(' ',Agent),255);
  67.     {$ENDIF}
  68.       FieldByName('UserAgent').AsString := Agent;
  69.       FieldByName('ThisPage').AsString :=
  70.         CopyStripDelete(Str,1,128);
  71.       FieldByName('Referrer').AsString :=
  72.         CopyStripDelete(Str,1,128);
  73.       if FieldByName('Referrer').AsString <> '@' then
  74.         Inc(refer); // actual referrer info
  75.       Post;
  76.       Inc(hits)
  77.     end;
  78.     writeln(hits,' page requests (',
  79.            (refer*100) div hits,'% referred) ',
  80.            'in logfile ',ParamStr(1))
  81.   finally
  82.     System.Close(f);
  83.     Close;
  84.     Free
  85.   end
  86. end.
  87.